package com.zust.zst.chooselesson.service;

import com.zust.zst.common.dto.chooselesson.AddCourseDTO;
import com.zust.zst.common.dto.chooselesson.GetCourseByTermAndCollegeDTO;
import com.zust.zst.common.dto.chooselesson.SearchCourseDTO;
import com.zust.zst.common.vo.chooselesson.CourseInfoVO;

import java.util.List;

/**
 * 课程信息管理服务层
 *
 * @author Gavin Zhang
 * @date 2022/11/22 20:45
 */
public interface CourseInfoManagementService {

    /**
     * 获取学期
     *
     * @return 已添加的学期
     */
    List<String> getAllTerm();

    /**
     * 获取所有学院
     *
     * @return 已添加的学院
     */
    List<String> getAllColleges();

    /**
     * 添加课程信息
     *
     * @param addCourseDTO 课程信息
     * @return 0-添加失败；其他数字-添加成功
     */
    int addCourse(AddCourseDTO addCourseDTO);

    /**
     * 获得对应学期、学院的课程信息
     *
     * @param dto 学期、学院和分页信息
     * @return 对应学期、学院的课程信息
     */
    List<CourseInfoVO> getCourseByTermAndCollege(GetCourseByTermAndCollegeDTO dto);

    /**
     * 获得对应学期、学院的课程信息条数
     *
     * @param term    学期
     * @param college 学院
     * @return 对应学期、学院的课程信息条数
     */
    int getTotalLineByTermAndCollege(String term, String college);

    /**
     * 通过指定课程名获得对应课程信息
     *
     * @param searchCourseDTO 学期、学院、课程名和分页信息
     * @return 对应的课程信息
     */
    List<CourseInfoVO> getCoursesBySearchingName(SearchCourseDTO searchCourseDTO);

    /**
     * 获得对应学期、学院、课程名的课程信息条数
     *
     * @param term    学期
     * @param college 学院
     * @param course  课程名
     * @return 对应学期、学院、课程名的课程信息条数
     */
    int getTotalLineBySearchingCourse(String term, String college, String course);

    /**
     * 更新课程信息
     *
     * @param courseInfoVO 更新的课程信息
     * @return 更新操作状态
     */
    int updateCourse(CourseInfoVO courseInfoVO);

    /**
     * 删除课程
     *
     * @param courseId 课程id
     * @return 删除课程的操作状态
     */
    int deleteCourseById(int courseId);
}
